今天來講解Laravel
的Eloquent Relationships
裡的關係要如何建立,
資料庫(database)的表單(tables)都是有著相互依賴的關係,
例如,部落格的文章可能有很多評論,或者是那位客戶下的訂單是哪間供應商之間的關係,Eloquent
使管理和處理這些關係變得容易,並支持幾種不同類型的關係:
Eloquent
的關係被定義在model classes
的方法裡,
像是model
裡都可看到use Illuminate\Database\Eloquent\Model;
,
將關係定義為是非常強大的連接方法和查詢功能,下面就來一一介紹。
一對一
關係在這裡是非常基礎的,例如,一位使用者
發表一篇文章
,它們彼此間就可以是One to One
的關係,所以先在migrations
裡建立好users
和posts
在到各自的model
建立關係
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
public function post()
{
return $this->hasOne('App\Post'); //hasOne表示一對一
}
protected $fillable = ['title', 'content'];
public function user()
{
return $this->belongsTo('App\User'); //belongsTo表示逆轉一對一或一對多
}
到資料庫管理工具手動輸入資料
下一步建立Route
//One To One Relationship
Route::get('/user/{id}/post', function($id){
return App\User::find($id)->post; //回傳到App\User裡的`post`function
});
Route::get('/post/{id}/user', function($id){
return App\Post::find($id)->user; //回傳到App\Post裡的`user`function
});
啟動服務到127.0.0.1:8000/user/1/post,此路徑代表的是User的id:1的ost資料
啟動服務到127.0.0.1:8000/post/1/user,此路徑代表的是Post的id:1的user資料
一對多
關係用於定義單個model擁有許多數量的其他model的關係。例如,文章可能有無數的評論,可以在Eloquent Model
上放置一個函數來定義一對多關係,Eloquent
會自動導向posts裡的_id
也就是user_id
。
public function posts()
{
return $this->hasMany('App\Post'); //Many表示一對多
}
protected $fillable = ['title', 'content'];
public function user()
{
return $this->belongsTo('App\User'); //belongsTo表示逆轉一對一或一對多
}
下一步建立Route
//One To Many Relationship
Route::get('/posts', function(){
return App\User::find(1)->posts; //回傳到App\User裡的`posts`function
});
Route::get('/users', function(){
return App\Post::find(1)->user; //回傳到App\Post裡的`user`function
});
啟動服務到127.0.0.1:8000/posts,此路徑代表的是User的id:1的全部Post資料
啟動服務到127.0.0.1:8000/users,此路徑代表的是Post的id:1的User資料
(這裡三筆資料都是回傳一樣的User)
鐵人賽也到了尾聲,但我仍然會繼續記錄我的學習過程,
本篇介紹到此,下次見~